/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package isd.general.util;

import isd.empresa.rn.EM_EmpresaRN;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import javax.activation.DataSource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.context.FacesContext;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import javax.mail.util.ByteArrayDataSource;


/**
 *
 * @author ctrosch
 */

public class ReportFactory implements Serializable {

    

    private Context ctx;
    private javax.sql.DataSource ds;
    private Connection conexion;
    private FacesContext context;


    

    public ReportFactory() throws NamingException, SQLException {
        ctx = new InitialContext();
        ds = (javax.sql.DataSource) ctx.lookup("SIID_CONN");
        conexion = ds.getConnection();
        conexion.setAutoCommit(true);
        context = FacesContext.getCurrentInstance();
    }

    public void verReportePDF(JasperReport jasperReport,String nombreSalida,Map parameters) throws NamingException, SQLException, JRException, IOException {

        JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, conexion);
        byte[] bytes = JasperExportManager.exportReportToPdf(print);

        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        response.addHeader("Content-disposition","inline;filename="+nombreSalida+".pdf");
        //response.addHeader("Content-disposition","attachment;filename="+nombreSalida+".pdf");
        response.setContentLength(bytes.length);
        response.getOutputStream().write(bytes);
        response.setContentType("application/pdf");
        context.responseComplete();

    }

    public void descargarReportePDF(JasperReport jasperReport,String nombreSalida,Map parameters) throws NamingException, SQLException, JRException, IOException {

        JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, conexion);
        byte[] bytes = JasperExportManager.exportReportToPdf(print);

        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
        response.addHeader("Content-disposition","attachment;filename="+nombreSalida+".pdf");
        response.setContentLength(bytes.length);
        response.getOutputStream().write(bytes);
        response.setContentType("application/pdf");
        context.responseComplete();

    }

    public String generarReporteHTML(String reportName,String nombreSalida,Map parameters) throws NamingException, SQLException, JRException, IOException {

        System.out.println("generarReporteHTML");
        String pathReport = context.getExternalContext().getRealPath("/") ;

        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResourceAsStream(reportName));

        JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters, conexion);

        JasperExportManager.exportReportToHtmlFile(print, pathReport+"pedidoweb.html");

        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        String linea="";
        String contenido = "";
        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File (pathReport+"pedidoweb.html");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            // Lectura del fichero

            while((linea=br.readLine())!=null) contenido+=linea+"\n";

            System.err.println(contenido);
            return contenido;

        }catch(Exception e){
            e.printStackTrace();

        }finally{
         // En el finally cerramos el fichero, para asegurarnos
         // que se cierra tanto si todo va bien como si salta
         // una excepcion.
         try{
            if( null != fr ){
               fr.close();
            }

            return "";
         }catch (Exception e2){

            e2.printStackTrace();
            return "";
         }
      }

    }

    public DataSource getArchivoAdjuntoPDF(String reportName,String nombreSalida,Map parameters) throws JRException{

        JasperPrint jasperPrint = JasperFillManager.fillReport( this.getClass().getClassLoader().getResourceAsStream(reportName),parameters ,conexion);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        JasperExportManager.exportReportToPdfStream(jasperPrint, baos);
        DataSource adjunto =  new ByteArrayDataSource(baos.toByteArray(), "application/pdf");
        return adjunto;

    }



}
